﻿/* ----------------------------------------------------------------------------
 * Copyright (c) Philip Stears 
 *
 * This source code is subject to terms and conditions of the Microsoft Public 
 * License (Ms-PL).
 * 
 * By using this source code in any fashion, you are agreeing to be bound 
 * by the terms of the Microsoft Public License.
 * 
 * To request a copy of the Microsoft Public License, send a request by email
 * to license@connectbasic.net.
 *
 * This notice must not be removed from this software.
 * ---------------------------------------------------------------------------- */

namespace ConnectBasic.Shell.Extensibility
{
    using System;

    /// <summary>
    /// Represents an instance of a ConnectBasic shell.
    /// </summary>
    public interface IShell : IServiceProvider
    {

        /// <summary>
        /// Gets/sets whether the shell is currently visible.
        /// </summary>
        bool IsVisible { get; }

        /// <summary>
        /// Shows the shell.
        /// </summary>
        void Show();

        /// <summary>
        /// Hides the shell.
        /// </summary>
        void Hide();

        /// <summary>
        /// Gets the collection of projects loaded into
        /// the shell.
        /// </summary>
        IProjectCollection Projects { get; }

        /// <summary>
        /// Gets the collection of tool windows registered
        /// against the shell.
        /// </summary>
        IToolWindowCollection ToolWindows { get; }

        /// <summary>
        /// Gets the collection of tool window zones in the
        /// shell.
        /// </summary>
        IToolWindowZoneCollection ToolWindowZones { get; }

        /// <summary>
        /// Gets a collection of states in which the shell
        /// can be.
        /// </summary>
        IShellStateCollection States { get; }
    }
}
